from collections import OrderedDict

from content.models import ContentCategory
from goods.models import GoodsChannel

"""
商品分类结构

商品频道组 包含多个 商品频道
商品频道 一对一 商品一级类别 外键归在商品频道
商品类别 三级联动：
    一级 包含多个 二级
    二级 包含多个 三级

要返回的字典结构
{
    频道组id：{
        频道列表：[
            {'name': 频道对应一级类别名称, 
             'id': 一级类别id,
             'url': 频道url}
        ],
        
        二级类别列表：[
            二级类别模型对象(新建属性：三级类别列表=[
                三级类别模型对象，
            ])，
        ]
    },
    ...    
}
"""


def get_goods_catetory():
    """
    获取序列化的商品分类字典
    :return: 字典
    """

    category = OrderedDict()
    chanels = GoodsChannel.objects.order_by('group_id', 'sequence')

    for chanel in chanels:
        group_id = chanel.group_id
        if group_id not in category.keys():
            category[group_id] = {'chanels': [], 'subs': []}
            # print(group_id)


        cc = chanel.category
        category[group_id]['chanels'].append({
            'id': cc.id,
            'name': cc.name,
            'url': chanel.url
        })

        for cat2 in cc.subs.all():
            cat2.lsubs = []
            for cat3 in cat2.subs.all():
                cat2.lsubs.append(cat3)
            category[group_id]['subs'].append(cat2)

    return category


def get_adv_info():
    # 序列化广告
    advd = OrderedDict()
    advs = ContentCategory.objects.all()

    for adv in advs:
        advd[adv.key] = adv.content_set.filter(status=True).order_by('sequence')

    return advd


def get_breadcrumb(category):
    # 获取面包屑导航
    if not category.parent:
        breadcrumb = {
            'cat1': category,
            'cat2': '',
            'cat3': '',
        }
    elif not category.subs.all():
        breadcrumb = {
            'cat1': category.parent.parent,
            'cat2': category.parent,
            'cat3': category,
    }
    else:
        breadcrumb = {
            'cat1': category.parent,
            'cat2': category,
            'cat3': '',
        }
    breadcrumb['cat1'].url = breadcrumb['cat1'].goodschannel_set.all()[0].url
    return breadcrumb
